Lab 1 - VHDL simulation

Part 2

 

Задача 5 -- Симулация на D-Tригер управляван по ниво посредством тестова установка (test-bench)

Да се разработи тестова установка за проверка на модела на D-тригер разгледан в задача 2. Схемата на тази тестова установка е показана на фигура 9а.

Фигура 9а -- Тестова установка за симулация на D-тригер управляван по ниво

На фигура 9б е даден текста на тестовата установка, която се намира във файла dlb_std_tb.vhd .

Тестовата установка представлява самостоятелна проектна единица, която се компилира независимо от тествания модел. Моделът на тригера DLATCH се вклюява в тестовата установка посредством операторите component (ред 9 - 11) и port map (ред 17). Входните въздействия да се генерират от процеса STM (ред 19-34). Връзката между тествания модел и генератора на входните въздействия се осъществява посредством сигналите DT, ET и QT. Начинът по който тези сигнали се свързват към портовете на тествания модел се указва в оператора port map (ред 17).

Времедиаграмите на входните сигнали са показани на фигура 10.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
library IEEE;
use IEEE.std_logic_1164.all;

entity DLATCH_TB is 
end;

architecture TB of DLATCH_TB is

component DLATCH
    port (D, ENA: in std_logic; Q: out std_logic);
end component;

signal DT, ET, QT: std_logic;

begin

   UUT: DLATCH port map (DT, ET, QT);
   
   STM : process 
   begin
      DT <= '0'; ET <= '0';
      wait for 20 ns;
      DT <= '0'; ET <= '1';
      wait for 20 ns;    
      DT <= '1'; ET <= '1';
      wait for 20 ns;
      ET <= '1';
      DT <= '0' ,'X' after 15 ns, '1' after 20 ns; 
      wait for 30 ns;
      ET <= '0';
      DT <= '0' ,'X' after 15 ns, '1' after 20 ns;
      wait for 30 ns;
      wait;     
   end process STM;
   
end TB;


Фигура 9б -- Тестова установка за симулация на D-тригер управляван по ниво.

 


Фигура 10 -- Входни въздействия за симулация на D-тригер управляван по ниво

 

Задача 6 -- Симулация на D-Tригер управляван по фронт посредством тестова установка (test-bench)

Да се разработи тестова установка за проверка на модела от задача 4. Входните въздействия да се подават от два отделни процеса: DGEN за данните и CLKGEN за тактовия сигнал (фигура 11). Времедиаграмите на входните сигнали са показани също на фигура 11.

Генерирането на тактовия сигнал може да се опише по следния начин:
CLKGEN : process
begin
    CLK <= not CLK;
   wait for 25 ns;
end process;

 


Фигура 11 -- Тестова установка и входни въздействия за симулация на D-тригер

 

Задача 7 -- Автоматизирана тестова установка

В тази задача ще бъде извършена симулация на модела на  JK-тригер (виж задача 3) посредством тестова установка, която проверява коректността на резултатите от симулацията. При създаването на подобни "автоматизирани" тестови установки разработчикът трябва да укаже в кои моменти от симулацията ще се проверяват изходните на модела и какви са техните коректни стойности.

Текста на тестовата установка е даден на фигура 12 и във файла jkff_tb.vhd . Моделът на JK-тригера е даден във файл jkff_err.vhd . Проверките на изходните сигнали се извършват посредством операторите assert. Той има следния формат:

assert логическо условие report текст на съобщение за грешка;

 Ако логическото условие не е изпълнено се отпечатва момента на извършване на проверката и текста на съобщението за грешка.

Симулирайте модела на тригера и с помощта на съобщенията от тестовата установка намерете и отстранете допуснатата в модела грешка.

library IEEE;
use IEEE.std_logic_1164.all;

entity JKFF_TB is 
end;

architecture TB of JKFF_TB is

component JKFF
    port (J, K, CLK : in std_logic; Q :buffer std_logic);
end component;

signal J, K, Q : std_logic;
signal CLK : std_logic := '1';

begin

   UUT: JKFF port map (J, K, CLK, Q);

   STM : process begin

      -- apply the stimuls
      J <= '0'; K <= '1';

      -- wait for the outputs to settle
      wait for 100 ns;

      -- check the results
      assert Q = '0' report "Q is not 0";

      J <= '0'; K <= '0';
      wait for 100 ns;
      assert Q  = '0' report "Q is not 0";

      J <= '1'; K <= '0';
      wait for 100 ns;
      assert Q  = '1' report "Q is not 1";

      J <= '0'; K <= '0';
      wait for 100 ns;
      assert Q  = '1' report "Q is not 1";

      J <= '1'; K <= '1';
      wait for 100 ns; 
      assert Q  = '0' report "Q is not 0";

      wait for 100 ns; 
      assert Q  = '1' report "Q is not 1";

      wait for 100 ns; 
      assert Q  = '0' report "Q is not 0";

      wait;
   
   end process;
   
   CLOCK: process begin
      CLK <= not CLK;
      wait for 50 ns;
   end process;
   
end TB;


Фигура 12 -- Автоматизирана тестова установка за симулация на JK-тригер

 

--- Край на Lab1 - Част 2---